package com.huashi.dealer.modular.business.order.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huashi.dealer.commonEntity.Order;
import com.huashi.dealer.commonEntity.Express;
import com.huashi.dealer.modular.business.order.bo.OrderSendBo;
import com.huashi.dealer.modular.business.order.param.StoreOrderListParam;
import com.huashi.dealer.modular.business.order.param.OrderDeliveryParam;
import com.huashi.dealer.modular.business.order.param.OrderPriceUpdateParam;
import com.huashi.dealer.modular.business.order.param.OrderAuditParam;
import com.huashi.dealer.modular.business.order.vo.StoreOrderListVo;
import com.huashi.dealer.modular.business.order.vo.StoreOrderDetailVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * Store端订单服务接口
 * 对应PHP项目的订单管理功能
 *
 * @author 谭陈强
 * @since 2025-08-15
 */
public interface StoreOrderService extends IService<Order> {

    /**
     * 获取订单列表
     * @param param 查询参数
     * @param page 分页参数
     * @return 订单列表
     */
    Page<StoreOrderListVo> getOrderList(StoreOrderListParam param, Page<StoreOrderListVo> page);

    /**
     * 获取订单详情
     * @param orderId 订单ID
     * @return 订单详情
     */
    StoreOrderDetailVo getOrderDetail(Long orderId);

    /**
     * 导出订单数据
     * 根据传入参数自动判断导出哪种类型的订单数据
     * @param param 导出参数，包含orderType等筛选条件
     * @return 导出的Excel文件字节数组
     */
    byte[] exportOrders(StoreOrderListParam param);

    /**
     * 确认发货
     * @param orderId 订单ID
     * @param param 发货参数
     */
    void confirmDelivery(Long orderId, OrderDeliveryParam param);

    /**
     * 修改订单价格
     * @param orderId 订单ID
     * @param param 价格修改参数
     */
    void updateOrderPrice(Long orderId, OrderPriceUpdateParam param);

    /**
     * 初审订单
     * @param orderId 订单ID
     * @param param 审核参数
     */
    void initialAudit(Long orderId, OrderAuditParam param);

    /**
     * 复审订单
     * @param orderId 订单ID
     * @param param 审核参数
     */
    void finalAudit(Long orderId, OrderAuditParam param);

    /**
     * 审核取消订单
     * @param orderId 订单ID
     * @param param 审核参数
     */
    void auditCancelOrder(Long orderId, OrderAuditParam param);


    void express(OrderSendBo bo);

    /**
     * 获取物流公司列表
     * @return 物流公司列表
     */
    List<Express> getExpressList();

    void batchDelivery(MultipartFile file, Long expressId);
}
